package com.zyx.javademo.reflex;

/**
 * @author zyx
 * @since 2021/7/4 08:24
 * desc:
 */
public class GetNameDemo {
    public static void main(String[] args) {
        // 外部普通类
        System.out.println("方法名             类名");
        System.out.println("getName            " + GetNameDemo.class.getName());
        System.out.println("getCanonicalName   " + GetNameDemo.class.getCanonicalName());
        System.out.println("getSimpleName      " + GetNameDemo.class.getSimpleName());
        System.out.println();

        // 内部类
        System.out.println("getName            " + TestInnerClass.class.getName());
        System.out.println("getCanonicalName   " + TestInnerClass.class.getCanonicalName());
        System.out.println("getSimpleName      " + TestInnerClass.class.getSimpleName());
        System.out.println();

        // 数组类
        TestInnerClass[] testInnerClasses = new TestInnerClass[]{
                new TestInnerClass(),
                new TestInnerClass(),
                new TestInnerClass()
        };
        System.out.println("getName            " + testInnerClasses.getClass().getName());
        System.out.println("getCanonicalName   " + testInnerClasses.getClass().getCanonicalName());
        System.out.println("getSimpleName      " + testInnerClasses.getClass().getSimpleName());
        System.out.println();
        /*
        result
        方法名             类名
        getName            com.zyx.javademo.reflex.GetNameDemo
        getCanonicalName   com.zyx.javademo.reflex.GetNameDemo
        getSimpleName      GetNameDemo

        getName            com.zyx.javademo.reflex.GetNameDemo$TestInnerClass
        getCanonicalName   com.zyx.javademo.reflex.GetNameDemo.TestInnerClass
        getSimpleName      TestInnerClass

        getName            [Lcom.zyx.javademo.reflex.GetNameDemo$TestInnerClass;
        getCanonicalName   com.zyx.javademo.reflex.GetNameDemo.TestInnerClass[]
        getSimpleName      TestInnerClass[]

        简单分析:
            对于大部分class而言,getCanonicalName和getName这两个方法没有什么不同的,但是对于array或内部类等就显示出来了。
            getName()方法，以String的形式，返回Class对象的‘实体’名称
            getSimpleName()方法，是获取源代码中给出的‘底层类’简称
         */

    }

    static class TestInnerClass {

    }

}
